步驟 12:封裝除錯與發佈¶
注意: 此範例適用於單一組態產生器,不適用於多組態產生器(例如 Visual Studio)。
預設情況下,CMake 的模型是一個建置目錄僅包含單一組態,無論是除錯 (Debug)、發佈 (Release)、最小尺寸發佈 (MinSizeRel) 或是帶有除錯資訊的發佈 (RelWithDebInfo)。然而,可以設定 CPack 以捆綁多個建置目錄,並建構一個包含相同專案多個組態的套件。
首先,我們要確保除錯和發佈建置使用不同的名稱來命名將被安裝的函式庫。讓我們使用 d
作為除錯函式庫的後綴。
在頂層 CMakeLists.txt
檔案的開頭附近設定 CMAKE_DEBUG_POSTFIX
set(CMAKE_DEBUG_POSTFIX d)
add_library(tutorial_compiler_flags INTERFACE)
以及 tutorial 執行檔的 DEBUG_POSTFIX
屬性
add_executable(Tutorial tutorial.cxx)
set_target_properties(Tutorial PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)
我們也為 MathFunctions
函式庫添加版本編號。在 MathFunctions/CMakeLists.txt
中,設定 VERSION
和 SOVERSION
屬性
set_property(TARGET MathFunctions PROPERTY VERSION "1.0.0")
set_property(TARGET MathFunctions PROPERTY SOVERSION "1")
從 Step12
目錄中,建立 debug
和 release
子目錄。佈局看起來會像這樣
- Step12
- debug
- release
現在我們需要設定除錯和發佈建置。我們可以使用 CMAKE_BUILD_TYPE
來設定組態類型
cd debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
cd ../release
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
現在除錯和發佈建置都已完成,我們可以使用自訂組態檔將兩個建置封裝到一個發佈版本中。在 Step12
目錄中,建立一個名為 MultiCPackConfig.cmake
的檔案。在此檔案中,首先包含由 cmake
執行檔建立的預設組態檔。
接下來,使用 CPACK_INSTALL_CMAKE_PROJECTS
變數來指定要安裝的專案。在本例中,我們要安裝除錯和發佈版本。
include("release/CPackConfig.cmake")
set(CPACK_INSTALL_CMAKE_PROJECTS
"debug;Tutorial;ALL;/"
"release;Tutorial;ALL;/"
)
從 Step12
目錄中,執行 cpack
,並使用 config
選項指定我們的自訂組態檔
cpack --config MultiCPackConfig.cmake